function create<T>(c:{new ():T;}):T{
    return new c()
}

class Beekeeper {
    hasMask:boolean
}

class Zookeeper {
    nametag:string
}
class Animal {
    numLegs:number
}

class Bee extends Animal{
    keeper:Beekeeper
}

class Lion extends Animal{
    keeper:Zookeeper
}
class UFO {
    keeper:Zookeeper
}
class UFO2 {
    keeper:Zookeeper
    numLegs:number
}
// 泛型约束 是 Animal 有numlegs属性才行
function createInstance<A extends Animal>(c:new ()=>A):A{
    return new c()
}

createInstance(Lion).keeper.nametag
createInstance(Bee).keeper.hasMask
createInstance(UFO) // 主要原因是 不 满足泛型约束 没有 numLegs 属性 
// 想要该属性的方法：1.继承自 Animal 2 .自身增加该属性
createInstance(UFO2) // 满足泛型约束 有 numLegs 属性